/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.prsistema.DAO;

import com.prsistema.utilitarias.Receita;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import java.sql.ResultSet;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.ArrayList;

public class DAOReceita {

    private Connection conector;

    public DAOReceita(Connection conn) {
        this.conector = conn;
    }

    public boolean insert(Receita receita) {
        PreparedStatement stmt = null;
        try {
            final String sql = "insert into receita (rec_id, rec_nomeProduto, rec_infoAdd) VALUES (?,?,?)";
            stmt = conector.prepareStatement(sql);

            stmt.setString(1, receita.getIdRec());
            stmt.setString(2, receita.getNomeProduto());
            stmt.setString(3, receita.getInfoRec());
            stmt.executeUpdate();
            stmt.close();

            return true;

        } catch (SQLIntegrityConstraintViolationException ex) {
            JOptionPane.showMessageDialog(null, "Já existe uma receita cadastrada com este código");
            return false;
        }catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Falha ao salvar receita, erro: " + ex);
            return false;
        }
    }

    public ArrayList<Receita> selectLike(String prod){
        ArrayList<Receita> receit = new ArrayList<Receita>();
        PreparedStatement pstm = null;

        try {
            String sql = "select * from receita where rec_nomeProduto like (?) order by rec_nomeProduto";
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, "%" + prod +"%");
            ResultSet resultado = pstm.executeQuery();

            while (resultado.next()) {
                Receita rc = new Receita();

                rc.setIdRec(resultado.getString("rec_id"));
                rc.setNomeProduto(resultado.getString("rec_nomeProduto"));
                rc.setInfoRec(resultado.getString("rec_InfoAdd"));

                receit.add(rc);
            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Falha ao carregar dados, erro: " + ex);
            receit = null;
        } finally {
            return receit;
        }
    }
    
    public Receita select(String prod) {
        Receita rc = new Receita();
        PreparedStatement pstm = null;
        
        try {

            final String sql = "select * from receita where rec_nomeProduto=(?)";
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, prod);
            ResultSet resultado = pstm.executeQuery();

            if (resultado.next()) {
                rc.setIdRec(resultado.getString("rec_id"));
                rc.setNomeProduto(resultado.getString("rec_nomeProduto"));
                rc.setInfoRec(resultado.getString("rec_infoAdd"));
            }
            
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Falha ao carregar dados, erro: " + ex);
        }finally{
            return rc;
        }
    }

    public ArrayList<Receita> selectAll() {
        ArrayList<Receita> receit = new ArrayList<Receita>();
        PreparedStatement pstm = null;

        try {
            String sql = "select * from receita order by rec_nomeProduto";
            pstm = this.conector.prepareStatement(sql);
            ResultSet resultado = pstm.executeQuery();

            while (resultado.next()) {
                Receita rc = new Receita();

                rc.setIdRec(resultado.getString("rec_id"));
                rc.setNomeProduto(resultado.getString("rec_nomeProduto"));
                rc.setInfoRec(resultado.getString("rec_infoAdd"));

                receit.add(rc);
            }

        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Falha ao carregar dados, erro: " + ex);
            receit = null;
        } finally {
            return receit;
        }
    }

    public boolean delete(Receita receita) {
        PreparedStatement pstm = null;

        try {
            final String sql = "delete from receita where rec_id=(?)";
            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, receita.getIdRec());
            pstm.executeUpdate();
            pstm.close();

            return true;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Falha ao excluir, erro: " + erro);
            return false;
        }
    }

    public boolean update(Receita receita, String cod) {
        PreparedStatement pstm = null;
        try {
            final String sql = "update receita set rec_id=(?), rec_nomeProduto=(?), rec_infoAdd=(?) where rec_id=(?)";

            pstm = this.conector.prepareStatement(sql);
            pstm.setString(1, receita.getIdRec());
            pstm.setString(2, receita.getNomeProduto());
            pstm.setString(3, receita.getInfoRec());
            pstm.setString(4, cod);
            pstm.executeUpdate();
            pstm.close();

            return true;
        } catch (SQLIntegrityConstraintViolationException ex) {
            JOptionPane.showMessageDialog(null, "Já existe uma receita cadastrada com este código");
            return false;
        } catch (Exception erro) {
            JOptionPane.showMessageDialog(null, "Falha ao alterar, erro: " + erro);
            return false;
        }
    }
}